package com.dengqi.mymodule.activity.arouter;

import android.content.Context;
import android.util.Log;

import com.alibaba.android.arouter.facade.Postcard;
import com.alibaba.android.arouter.facade.annotation.Interceptor;
import com.alibaba.android.arouter.facade.callback.InterceptorCallback;
import com.alibaba.android.arouter.facade.template.IInterceptor;

/**
 * Created by dell on 2019/1/8
 */
// 比较经典的应用就是在跳转过程中处理登陆事件，这样就不需要在目标页重复做登陆检查
// 拦截器会在跳转之间执行，多个拦截器会按优先级顺序依次执行
// Interceptor可以定义多个，比如定义登录检查拦截器，权限检查拦截器等等，拦截器的优先级使用priority定义，优先级越大，越先执行。
// 如果有些路由希望不经过任何的拦截器，ARouter很贴心的给出了一个绿色通道函数供我们使用，使用greenChannel()时所有的Interceptor将失效
@Interceptor(priority = 8, name = "测试用拦截器")
public class TestInterceptor implements IInterceptor {

    private Context mContext;

    @Override
    public void process(Postcard postcard, InterceptorCallback callback) {

        // callback.onContinue(postcard);  // 处理完成，交还控制权
        // callback.onInterrupt(new RuntimeException("我觉得有点异常"));      // 觉得有问题，中断路由流程
        // 以上两种至少需要调用其中一种，否则不会继续路由

        Log.e("interceptor", postcard.getPath() + ".." + postcard.getGroup());
        boolean isLogin = Constant.isLogin; //判断当前登录状态
        if (isLogin) {
            callback.onContinue(postcard);
        } else {
            callback.onInterrupt(new RuntimeException("需要登录"));
//            ARouter.getInstance().build("/test/login").navigation(); //跳转登录页面
        }
    }

    @Override
    public void init(Context context) {
        // 拦截器的初始化，会在sdk初始化的时候调用该方法，仅会调用一次
        this.mContext = context;
    }
}
